import * as utils from './utils.js'

// 用来初始化webSocket连接
function wsInit() {
	uni.connectSocket({
		url: 'ws://'+ utils.baseUrl +':12000/im',
	});
	uni.onSocketOpen((res) => {
	  console.log('已经成功连接WebSocket服务器！');
	  // 消息注册
	  let uid = utils.getUser("uid");
	  // 发送注册消息给服务器
	  let msg = {
		  action: 100,
		  from: uid
	  }
	  sendMsg(msg);
	});
	uni.onSocketClose((res) => {
	  console.log('WebSocket 已关闭！');
	});	
	uni.onSocketClose((res) => {
	  console.log('已经断开了WebSocket连接！');
	});	
	// 接收WebSocket的消息
	uni.onSocketMessage((res) => {
		// 将消息字符串转换成js对象
		let chatMsg = JSON.parse(res.data);
		if (chatMsg.action == 101) {
			// 缓存聊天消息
			cacheChatMsg(chatMsg.from, chatMsg);
		}
		// 将消息发送给指定的聊天页面
		uni.$emit('chat-msg-' + chatMsg.from, chatMsg);
	});
}

/**
 * 缓存聊天记录
 * @param {Object} msg
 */
function cacheChatMsg(fid, msg) {
	// 获取原本的数组
	let msgArray = uni.getStorageSync("chat-history-" + utils.getUser("uid") + "-" + fid);
	if (!msgArray) {
		// 如果为空，则需要创建新数组
		msgArray = [];
	} else {
		// 如果不为空，需要将字符串转成数组
		msgArray = JSON.parse(msgArray);
	}
	// 将消息放入历史数组中
	msgArray.push(msg);
	// 将数组保存在本地
	uni.setStorageSync("chat-history-" + utils.getUser("uid") + "-" + fid, JSON.stringify(msgArray));
}

/**
 * 获取缓存的消息
 * @param {Object} fid
 */
function getCacheMsg(fid) {
	let msgArray = uni.getStorageSync("chat-history-" + utils.getUser("uid") + "-" + fid);
	if (msgArray) {
		return JSON.parse(msgArray);
	} else {
		return [];
	}
}

/**
 * 发送消息
 * @param {Object} msg - 消息对象
 */
function sendMsg(msg) {
	uni.sendSocketMessage({
      data: JSON.stringify(msg)
	});
}

/**
 * 关闭WebSocket连接
 */
function closeWs() {
	uni.closeSocket();
}

export {
	wsInit,
	closeWs,
	sendMsg,
	cacheChatMsg,
	getCacheMsg
}